<?php
namespace modules\post\form;

use idea\saf\sl\Form;
use helper\ErrorNo;
use library\Validator;

/**
 * Modules class file
 * modules表单管理类
 * @author 宋欢 <iphper@yeah.net>
 * @version $Id: Modules.php 1 2013-05-18 14:58:59Z huan.song $
 * @package modules.post.form
 * @since 1.0
 */
class Modules extends Form
{
	/**
	 * @var string 模型状态：开启
	 */
	const MODULE_STATUS_Y = 'y';
	
	/**
	 * @var string 模型状态：关闭
	 */
	const MODULE_STATUS_N = 'n';
	
	/**
	 * @var array 寄存模型状态选项
	 */
	public static $statuses = array(
		self::MODULE_STATUS_Y => '启用',
		self::MODULE_STATUS_N => '禁用',
	);
	
	/**
	 * @var array 寄存表的所有字段
	 */
	protected $_attributes = array(
		'module_id' => array(
			'label' => '模型ID',
			'type' => 'hidden'
		),

		'module_name' => array(
			'label' => '模型名称',
			'type' => 'text',
			'rule' => array(
				Validator::NOT_EMPTY => array(
					true,
					'请填写模型名.'
				)
			)
		),

		'module_tblname' => array(
			'label' => '类别表名',
			'type' => 'text',
			'rule' => array(
				Validator::NOT_EMPTY => array(
					true,
					'请填写模型表名.'
				),
				Validator::UNIQUE_MODULES_TBLNAME => true
			)
		),

		'module_status' => array(
			'label' => '模型状态',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::MODULE_STATUS_Y,
						self::MODULE_STATUS_N
					),
					'必须选中是否启用项，值只能是y或n.'
				)
			)
		),

		'module_description' => array(
			'label' => '模型描述',
			'type' => 'textarea'
		)
	);

	/**
	 * 获取模型状态选项
	 * @param string $value
	 * @return array
	 */
	public function getModuleStatusOptions()
	{
		return $this->getOptions(self::$statuses);
	}
	
	/**
	 * 通过模型状态选项，获取模型状态描述
	 * @param string $value
	 * @return string
	 */
	public function getModuleStatusLabel($value)
	{
		return isset(self::$statuses[$value]) ? self::$statuses[$value] : '';
	}

	/**
	 * 通过module_id获取module_name
	 * @param integer $value
	 * @return string
	 */
	public function getNameById($value)
	{
		$ret = $this->getService()->getByPk('module_name', $value);
		if ($ret['err_no'] !== ErrorNo::SUCCESS_NUM) {
			return '';
		}

		return $ret['module_name'];
	}

	/**
	 * 将所有模型的值组成Select表单元素
	 * @return array
	 */
	public function getModulesOptions()
	{
		$ret = $this->getService()->findAll();
		if ($ret['err_no'] !== ErrorNo::SUCCESS_NUM) {
			return array();
		}

		$data = array();
		foreach ($ret['data'] as $row) {
			$data[] = array(
				'value' => $row['module_id'],
				'label' => $row['module_name'],
			);
		}

		return $data;
	}
}
